import router from "@/router"
import storage from "./storage"
import store from "@/store"

//导入进度条
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
//判断本地是否有token，如果有，那么就放行

router.beforeEach((to,from,next)=>{
    nprogress.start()
    //to目标路由对象
    // from 源路由对象
    // next是个函数，调用之后，可以理解为放行
    // console.log(to)===>一个对象
    let token =storage.get("cc-token")
    if(token){
        // 判断是否有用户菜单
        if(!store.state.permission.userMenu.length){//没有的情况下
            // 发起请求，获取远程菜单
            store.dispatch("permission/FETCH_MENU_LIST")
            .then(()=>{
                // 这里要注意, next里面要传参数即要进入的页面的路由信息，因为next传参数后，当前要进入的路由会被废止，转而进入参数对应的路由，虽然是同一个路由，这么做主要是为了确保addRoute生效了,并且不产生历史记录
                next({path:to.path, replace: true});
            })
        }else{
            next()
        }
    }else{
        //没有token
        // 1.访问的是登录页
        if(to.path==="/login"){
            next()
        }else{
            //2.访问的不是登录页 强行调回登录页
            next({path:"/login"})
        }
    }
    
})
//全局后置钩子 进入了路由组件之后才回调
router.afterEach((to,from)=>{
    nprogress.done()
    // console.log("to",to)
    // console.log("from",from)
    //to里面有个属性叫做matched 这里能够获取到匹配成功的路由对象
    // 因为第0项匹配的是空自负床路径，我们不需要，所以要进行处理
    let matched=to.matched.filter((item,index)=>index>0)
    // console.log(matched)
    store.commit('permission/SET_CRUMB', matched)
})


export default router